'''
=== 用来生成测试案例 ===
测试案例有 5 + 1 部分构成:
    [三级菜单]_[交易市场]_[买卖方向]_[预埋单类型]_[测试点]：[测试点介绍]
'''

import random

from Tools.tools import LOG


# 委托页面的 【价格类型】
pricetype = ['指定价', '最高价', '对手价', '最新价', '最低价', '均价']

# 委托页面的 【委托数量】
tradeNum = ['该股票的最小交易单位', '该股票最小交易单位的整数倍', '该股票最小交易单位的整数倍且小于预计可交易数量']

class CaseStep:

    def __init__(self, testContent):
        self.testContent = testContent

    def parserKeyword(self):
        itemList = self.testContent.split('：')[0].split('_')
        menu = itemList[0]
        market = itemList[1]
        deal = itemList[2]
        type_ = itemList[3]
        testFunc = itemList[4]
        testpointSuffix = self.testContent.split('：')[1]
        return menu, market, deal, type_, testFunc, testpointSuffix

    def executeStep(self):
        LOG().WARNING(f"正在生成{self.testContent.split('：')[0]}的执行步骤")
        menu, market, deal, type_, testFunc, testpoint = self.parserKeyword()
        # 【步骤 1 】随机选择，包括三个参数 [ menu, market, deal ]
        stepList1 = [
                f"1. 打开交易端，[ 交易 ][ {menu} ][ {market} ]，进行证券[ {deal} ] 操作；",
                f"1. 交易端，进入[ 交易 ][ {menu} ][ {market} ]，委托方向为[ {deal} ]；",
                f"1. 进入交易端，选择[ 交易 ][ {menu} ][ {market} ]，点击 [ {deal} ]；",
                ]

        # 【步骤 2 】条件选择，如果测试点 [ testFunc ] 含有 “价格” 或 “委托数量” 则跳过一项
        stepList2_1 = [
                f"2. 选择价格类型 [ {random.choice(pricetype)} ]；",
                f"2. 委托价格为[ {random.choice(pricetype)} ]；",
                f"2. 将价格设为[ {random.choice(pricetype)} ]；",
                ]

        # 如果需要连接，应去掉前缀: stepList2_2[i][:3]
        stepList2_2 = [
                f"2. 输入委托数量为{random.choice(tradeNum)}和其他操作；",
                f"2. 委托数量为{random.choice(tradeNum)}；",
                f"2. 委托数量设为{random.choice(tradeNum)}；",
            ]

        # 【步骤 3 】随机选择，包括三个参数 [type_，testPoint，testFunc]
        stepList3_patch = f"其中[ {testFunc} ]设置为[ {testpoint} ]，"
        stepList3 = [
                f"3. 点击进入预埋单，选择[ {type_} ]，{stepList3_patch}填写其他信息，点击[ 确定 ]；",
                f"3. 点击进入预埋单，选择[ {type_} ]，{stepList3_patch}完善其他信息，并[ 确定 ]；",
            ]

        # 【步骤 4 】随机选择插入，无参数
        stepList4_patch1 = '查看买卖标识和价格类型是否正确；'   if random.randint(0,2) != 0  else ''
        stepList4_patch2 = '查看委托数量和委托状态是否正确；'   if random.randint(0,2) != 0   else ''
        stepList4_patch3 = '查看各个字段与[ 策略埋单管理 ][ 委托信息 ]是否一致；'   if random.randint(0,2) != 0   else ''
        stepList4 = [
            f'4. 点击委托界面[ 预策略埋单 ]，查看预埋单状态是否正确；{stepList4_patch1}{stepList4_patch2}{stepList4_patch3}'
            ]

        one = random.choice(stepList1)
        if '价格' in testFunc:
            two = random.choice(stepList2_2)
        elif '委托数量' in testFunc:
            two = random.choice(stepList2_1)
        else:
            two = random.choice(stepList2_1)+random.choice(stepList2_2)[3:]
        three = random.choice(stepList3)
        four = random.choice(stepList4)
        return '\n'.join([one, two, three, four])

if __name__ == '__main__':
    from Frames.testCaseParser import Parser
    Parser().sortedDict()
    for content in Parser().testContentOrderedDict.keys():
        print(CaseStep(content).executeStep())
